<?php

namespace com\aristo\ingenieros\model;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

include 'com/aristo/ingenieros/view/CarreraEntityView.php';
include 'com/aristo/ingenieros/view/EntityView.php';

use com\aristo\ingenieros\view\CarreraEntityView;
use com\aristo\ingenieros\view\EntityView;
use \Exception;
use \mysqli;

/**
 * Description of CarreraQuery
 *
 * @author ARISTO INGENIEROS
 */
class CarreraQuery {

    public static function getCarreras($termino, mysqli $con) {
        try {
            $termino = utf8_encode($termino);

            $sql = "SELECT
                        c.idcarrera,
                        c.descripcion,
                        c.resolucion,
                        c.anho,
                        f.descripcion
                    FROM carrera AS c INNER JOIN formacion AS f ON c.formacion_id = f.idformacion 
                    WHERE c.descripcion LIKE '%" . $termino . "%'
                    ORDER BY c.anho ASC, f.descripcion ASC, c.descripcion ASC";

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $carreras = array();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $descripcion = utf8_decode($row[1]);
                        $resolucion = utf8_decode($row[2]);
                        $anho = utf8_decode($row[3]);
                        $formacion = utf8_decode($row[4]);

                        $carrera = new CarreraEntityView();
                        $carrera->setId($id);
                        $carrera->setDescripcion($descripcion);
                        $carrera->setResolucion($resolucion);
                        $carrera->setAnho($anho);
                        $carrera->setFormacion($formacion);

                        $carreras [] = $carrera->toJSON();
                    }
                    return $carreras;
                } else {
                    return "NO EXISTE CARRERAS CONFIGURADAS";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CARRERAS: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function addCarrera($tipo, $descripcion, $resolucion, $anho, mysqli $con) {
        try {
            $tipo = utf8_encode($tipo);
            $descripcion = utf8_encode(trim($descripcion));
            $resolucion = utf8_encode($resolucion);
            $anho = utf8_encode($anho);

            $sqlBuscaTipo = "SELECT f.idformacion FROM formacion AS f WHERE f.descripcion = '" . $tipo . "'";

            $con->autocommit(FALSE);

            $search = $con->query($sqlBuscaTipo);

            if ($search) {
                $idTipo = "";
                while ($row = $search->fetch_row()) {
                    $idTipo = utf8_decode($row[0]);
                }

                $sql = "INSERT INTO carrera (descripcion, resolucion, anho, formacion_id) VALUES ('" . $descripcion . "','" . $resolucion . "'," . $anho . "," . $idTipo . ")";

                $query = $con->query($sql);

                if ($query) {
                    $rpta = new EntityView();
                    $rpta->setResponse("SUCCESS");
                    $rpta->setDescripcion("AGREGADO CORRECTAMENTE");
                    return $rpta->toJSON();
                } else {
                    return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CARRERA: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getCarrera($id, mysqli $con) {
        try {
            $id = utf8_encode($id);

            $sql = "SELECT
                    c.idcarrera,
                    c.descripcion,
                    c.resolucion,
                    c.anho,
                    f.descripcion
                FROM carrera AS c INNER JOIN formacion AS f ON c.formacion_id = f.idformacion
                WHERE c.idcarrera = " . $id;

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $carrera = new CarreraEntityView();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $descripcion = utf8_decode($row[1]);
                        $resolucion = utf8_decode($row[2]);
                        $anho = utf8_decode($row[3]);
                        $formacion = utf8_decode($row[4]);

                        $carrera->setId($id);
                        $carrera->setDescripcion($descripcion);
                        $carrera->setResolucion($resolucion);
                        $carrera->setAnho($anho);
                        $carrera->setFormacion($formacion);
                    }
                    return $carrera->toJSON();
                } else {
                    return "NO EXISTE CARRERAS CONFIGURADAS";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CARRERAS: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function updateCarrera($id, $descripcion, $resolucion, $anho, mysqli $con) {
        try {
            $id = utf8_encode($id);
            $descripcion = utf8_encode(trim($descripcion));
            $resolucion = utf8_encode(trim($resolucion));
            $anho = utf8_encode($anho);

            $con->autocommit(FALSE);

            $sql = "UPDATE carrera set descripcion = '" . $descripcion . "', resolucion = '" . $resolucion . "', anho = '" . $anho . "' WHERE idcarrera = " . $id;

            $query = $con->query($sql);

            if ($query) {
                $rpta = new EntityView();
                $rpta->setResponse("SUCCESS");
                $rpta->setDescripcion("EDITADO CORRECTAMENTE");
                return $rpta->toJSON();
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CARRERA: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

}